package io;

import java.io.*;

/**
 * JAVA将流分为两类
 * 节点流:又称为低级流，特点:它们是实际链接程序与另一端的"管道"，负责实际读写数据的流
 * 处理流:又称为高级流，特点:不能独立存在，必须链接在其他流上，目的是当数据经过该高级流
 *       时对其进行某种加工处理，简化我们的同等操作。
 * 实际开发中，我们进行一个复杂数据的IO操作时，总是会串联一组高级流到某个低级流上，对
 * 读写的数据进行流水线式的加工处理。这个操作也被称为"流的链接"。
 *
 * 常见的高级流:
 * 缓冲流:作用是加快读写效率
 * 压缩流:进行数据的压缩与解压缩(读写zip文件)
 * 音频流:进行音频编解码
 * 对象流:进行java对象的序列化与反序列化
 *
 * 缓冲流:
 * java.io.BufferedInputStream和BufferedOutputStream
 * 缓冲流作用:加快读写效率
 */
public class CopyDemo3 {
    public static void main(String[] args) throws IOException {
        /*
            文件流就是低级流，是实际链接程序与文件的管道，负责实际读写文件数据的流
         */
        FileInputStream fis = new FileInputStream("ppt.pptx");
        BufferedInputStream bis = new BufferedInputStream(fis);
        FileOutputStream fos = new FileOutputStream("ppt_cp.pptx");
        BufferedOutputStream bos = new BufferedOutputStream(fos);
        int d;
        /*
            缓冲流内部默认有一个8kb的字节数组，当我们使用缓冲流读写字节时，它们
            一定是转换为以8kb为单位的块读写进行来保证读写效率
         */
        while((d = bis.read())!=-1){
            bos.write(d);
        }
        System.out.println("写出完毕!");
        bis.close();
        bos.close();
    }
}



